//
//  VisitorLoginView.swift
//  个人微博
//
//  Created by 一介布衣 on 16/2/14.
//  Copyright © 2016年 HUAMANLOU. All rights reserved.
//

import UIKit
// 导入SnapKit命名空间
import SnapKit


// MARK: - 声明协议
@objc protocol VisitorLoginViewDelegate:NSObjectProtocol {
    // 协议方法
    optional func userWillRegister()
    func userWillLogin()
}



class VisitorLoginView: UIView {
    
    // 声明代理属性
    weak var delegate:VisitorLoginViewDelegate?
    
    // MARK: - 按钮的监听事件方法
    // 在private方法前，必须添加@objc，否则在其他文件中调用时，找不到这个方法的
    @objc private func loginBtnDidClick() {
        delegate?.userWillLogin()
    }
    
    @objc private func registerBtnDidClick() {
        delegate?.userWillRegister?()
    }
    
    
    // 外界调用的重要方法
    func setupUIWithInfo(imageName:String?, tipText:String) {
        tipLabel.text = tipText
        if let img = imageName {
            circleIcon.image = UIImage(named: img)
            // 隐藏大房子
            largeHouse.hidden = true
            // 需要将cirleIcon移到最顶层
            self.bringSubviewToFront(circleIcon)
        }else {
            // 说明在首页
            startAnimation()
        }
        
    }
    
    
    /// 圆圈的动画效果
    func startAnimation() {
        // 基础动画
        let base = CABasicAnimation(keyPath: "transform.rotation")
        // 设置重复的次数
        base.repeatCount = MAXFLOAT
        base.toValue = 2 * M_PI
        // 持续时间(转一圈所需的时间)
        base.duration = 10
        // 设置动画完成／页面失去活动状态，不移除涂层
        base.removedOnCompletion = false
        // 添加动画
        circleIcon.layer.addAnimation(base, forKey: nil)
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 设置UI
        setupUI()
    }
    
    // 当通过sb/xib加载该视图，程序就会崩溃（默认实现报错）
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    private func setupUI() {
        // 添加子视图
        addSubview(circleIcon)
        // 为了遮住圆圈
        addSubview(backImageView)
        addSubview(largeHouse)
        addSubview(tipLabel)
        addSubview(loginBtn)
        addSubview(registerBtn)
        
        
        // 添加约束：推荐使用链式约束
        // 1.圆圈约束
        //snp_makeConstraints 表示添加一条约束
        circleIcon.snp_makeConstraints { (make) -> Void in
            // 水平居中
            make.centerX.equalTo(self.snp_centerX)
            // 垂直居中，添加偏移量
            make.centerY.equalTo(self.snp_centerY).offset(-80)
        }
        
        // 2.大房子约束
        largeHouse.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(circleIcon.snp_center)
        }
        
        // 3.提示文案的约束
        tipLabel.snp_makeConstraints { (make) -> Void in
            make.centerX.equalTo(circleIcon)
            make.top.equalTo(circleIcon.snp_bottom).offset(16)
            // 宽度约束
            make.width.equalTo(225)
            // 为了防止页面跳动
            make.height.equalTo(40)
        }
        
        // 4.登录按钮约束
        loginBtn.snp_makeConstraints { (make) -> Void in
            make.left.equalTo(tipLabel.snp_left)
            make.top.equalTo(tipLabel.snp_bottom).offset(16)
            make.width.equalTo(100)
        }
        
        // 5.注册按钮约束
        registerBtn.snp_makeConstraints { (make) -> Void in
            make.right.equalTo(tipLabel.snp_right)
            make.top.equalTo(tipLabel.snp_bottom).offset(16)
            make.width.equalTo(100)
        }
        
        // 6.背景图片的约束
        backImageView.snp_makeConstraints { (make) -> Void in
            make.top.left.right.equalTo(self)
            make.bottom.equalTo(registerBtn.snp_bottom)
        }
        
        // 设置透明度和颜色
        self.backgroundColor = UIColor(white: 0.93, alpha: 1)
        
        // 添加监听事件
        loginBtn.addTarget(self, action: "loginBtnDidClick", forControlEvents: .TouchUpInside)
        registerBtn.addTarget(self, action: "registerBtnDidClick", forControlEvents: .TouchUpInside)
    }
    
    
    
    // 懒加载获取所有的子视图
    // 背景
    private lazy var backImageView:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_mask_smallicon"))
    
    // 圆圈
    private lazy var circleIcon:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_smallicon"))
    
    // 大房子
    private lazy var largeHouse:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_house"))
    
    // 提示文案
    // 方法一：使用类工厂方法抽取
//    private lazy var tipLabel:UILabel = UILabel.factoryLabel("关注一些人，回这里看看有什么惊喜", fontSize: 14, textColor: UIColor.darkGrayColor())
    
    // 方法二：使用便利的构造的方法抽取
    private lazy var tipLabel:UILabel = UILabel(text: "关注一些人，回这里看看有什么惊喜", fontSize: 14, textColor: UIColor.darkGrayColor())
    
    
    
    // 登录按钮
    // 方法一：使用类工厂方法抽取
//    private lazy var loginBtn:UIButton = UIButton.factoryBtn("common_button_white_disable", text: "登录", textColor: UIColor.darkGrayColor())
    
    // 方法二：使用便利的构造的方法抽取
    private lazy var loginBtn:UIButton = UIButton(backImageName: "common_button_white_disable", text: "登录", textColor: UIColor.darkGrayColor())
    
    // 注册按钮
//    private lazy var registerBtn:UIButton = UIButton.factoryBtn("common_button_white_disable", text: "注册", textColor: themeColor)
    
    private lazy var registerBtn:UIButton = UIButton(backImageName: "common_button_white_disable", text: "注册", textColor: themeColor)
}







